import { toast } from 'sonner';

// 通义千问API配置
const TONGYI_API_KEY = 'sk-77d718f5819a4a38b6e395d6436a350f';
const TONGYI_API_URL = 'https://api.dashscope.aliyuncs.com/compatible-mode/v1/chat/completions';

// AI服务接口
export interface AIService {
  // 商品风控检查
  checkProductRisk: (productInfo: ProductInfo) => Promise<RiskCheckResult>;
  
  // 评估商品新旧程度
  assessProductCondition: (productInfo: ProductInfo) => Promise<ConditionAssessment>;
}

// 商品信息接口
export interface ProductInfo {
  title: string;
  description: string;
  category: string;
  images?: string[];
}

// 风险检查结果接口
export interface RiskCheckResult {
  isRisky: boolean;
  riskLevel: 'low' | 'medium' | 'high';
  riskReasons: string[];
  suggestion: string;
}

// 商品新旧程度评估接口
export interface ConditionAssessment {
  condition: 'brand-new' | 'like-new' | 'good' | 'fair';
  confidence: number;
  reasoning: string;
  suggestedPriceRange?: string;
}

// 通义千问AI服务实现
class TongyiAIService implements AIService {
  private async callAPI(prompt: string): Promise<any> {
    try {
      const response = await fetch(TONGYI_API_URL, {
        method: 'POST',
        headers: {
          'Content-Type': 'application/json',
          'Authorization': `Bearer ${TONGYI_API_KEY}`
        },
        body: JSON.stringify({
          model: 'qwen-plus',
          messages: [
            {
              role: 'system',
              content: '你是一个校园二手交易平台的AI助手，负责评估商品风险和新旧程度。'
            },
            {
              role: 'user',
              content: prompt
            }
          ],
          temperature: 0.7,
          max_tokens: 1000
        })
      });

      if (!response.ok) {
        throw new Error(`API调用失败: ${response.statusText}`);
      }

      const data = await response.json();
      return data.choices[0]?.message?.content || '';
    } catch (error) {
      console.error('AI服务调用错误:', error);
      toast.error('AI服务暂时不可用，请稍后再试');
      throw error;
    }
  }

  // 检查商品风险
  async checkProductRisk(productInfo: ProductInfo): Promise<RiskCheckResult> {
    try {
      const prompt = `
        请分析以下商品信息是否存在风险：
        标题: ${productInfo.title}
        描述: ${productInfo.description}
        分类: ${productInfo.category}
        
        请按照以下格式返回JSON结果：
        {
          "isRisky": boolean,
          "riskLevel": "low" | "medium" | "high",
          "riskReasons": ["原因1", "原因2"],
          "suggestion": "建议内容"
        }
        
        风险类型包括但不限于：违禁品、侵权内容、虚假信息、敏感话题、价格异常等。
        如果没有风险，isRisky设为false，riskLevel设为low，riskReasons为空数组。
      `;

      const result = await this.callAPI(prompt);
      // 尝试解析JSON结果
      try {
        return JSON.parse(result);
      } catch (e) {
        // 如果解析失败，返回默认安全结果
        console.error('风险检查结果解析失败:', e);
        return {
          isRisky: false,
          riskLevel: 'low',
          riskReasons: [],
          suggestion: '商品信息正常'
        };
      }
    } catch (error) {
      // 发生错误时默认认为商品安全，避免影响用户体验
      return {
        isRisky: false,
        riskLevel: 'low',
        riskReasons: [],
        suggestion: '商品信息正常'
      };
    }
  }

  // 评估商品新旧程度
  async assessProductCondition(productInfo: ProductInfo): Promise<ConditionAssessment> {
    try {
      const prompt = `
        请根据以下商品信息评估其新旧程度：
        标题: ${productInfo.title}
        描述: ${productInfo.description}
        分类: ${productInfo.category}
        
        请按照以下格式返回JSON结果：
        {
          "condition": "brand-new" | "like-new" | "good" | "fair",
          "confidence": 0-100的数字,
          "reasoning": "评估理由",
          "suggestedPriceRange": "建议价格范围(可选)"
        }
        
        新旧程度定义：
        - brand-new: 全新，未使用过
        - like-new: 九成新，几乎没有使用痕迹
        - good: 良好，有轻微使用痕迹
        - fair: 一般，有明显使用痕迹但功能正常
      `;

      const result = await this.callAPI(prompt);
      // 尝试解析JSON结果
      try {
        return JSON.parse(result);
      } catch (e) {
        console.error('新旧程度评估结果解析失败:', e);
        // 返回默认评估结果
        return {
          condition: 'good',
          confidence: 70,
          reasoning: '基于有限信息的评估',
          suggestedPriceRange: '暂无建议价格'
        };
      }
    } catch (error) {
      // 发生错误时返回默认评估
      return {
        condition: 'good',
        confidence: 70,
        reasoning: '无法获取AI评估',
        suggestedPriceRange: '暂无建议价格'
      };
    }
  }
}

// 导出单例实例
export const aiService = new TongyiAIService();